package euler.p001_050;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import euler.MainEuler;
import euler.helper.NaturalHelper;
import euler.helper.Utils;

public class Euler042 extends MainEuler {

    /*
        The nth term of the sequence of triangle numbers
        is given by, tn = ½n(n+1); so the first ten triangle numbers are:

        1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

        By converting each letter in a word to a number corresponding
        to its alphabetical position and adding these values we form a word value.
        For example, the word value for SKY is 19 + 11 + 25 = 55 = t(10).
        If the word value is a triangle number then we shall call the word a triangle word.

        Using http://projecteuler.net/project/words.txt
        a 16K text file containing nearly two-thousand common English words,
        how many are triangle words?
     */
    public String resolve() throws IOException {

        String filePath = Utils.pathToFiles + "words.txt";

        BufferedReader br = null;
        String strLine;

        try {
            br = new BufferedReader(new FileReader(new File(filePath)));
            strLine = br.readLine();
        } finally {
            if (br != null) {
                br.close();
            }
        }

        String[] split = strLine.split("\",\"");

        split[0] = split[0].substring(1);
        split[split.length-1] = split[split.length-1].substring(0,split[split.length-1].length()-1);

        int count = 0;
        for (int i = 0; i < split.length; i++) {
            int suma = 0;
            for (int j = 0; j < split[i].length(); j++) {
                suma+=(split[i].charAt(j) - 'A' + 1);
            }
            if (NaturalHelper.isTriangle(suma)) {
                count++;
            }
        }

        return String.valueOf(count);
    }

}
